//////////////////////////////////////////////////////////////////////////
//
// GAM203
// Abstract Base Application State Class
// ABAppState.h
// 
// Grant Johnson
// Qantm College
// 27/10/2010
//
// Inherited by States
//
//////////////////////////////////////////////////////////////////////////

#ifndef ABAPPSTATE_H
#define ABAPPSTATE_H

class ABAppState
{
public:
	ABAppState() {}
	virtual ~ABAppState() {}
	
	//////////////////////////////////////////////////////////////////////////
	//Pure virtual function, is called when the state is entered
	//////////////////////////////////////////////////////////////////////////
	virtual void OnEnter() = 0;
	

	//////////////////////////////////////////////////////////////////////////
	//Pure virtual function, is called when the state is exited
	//////////////////////////////////////////////////////////////////////////
	virtual void OnExit() = 0;


	//////////////////////////////////////////////////////////////////////////
	//Pure virtual function, is called when the state is paused
	//////////////////////////////////////////////////////////////////////////
	virtual void OnPause() = 0;


	//////////////////////////////////////////////////////////////////////////
	//Pure virtual function, is called when the state is resumed
	//////////////////////////////////////////////////////////////////////////
	virtual void OnResume() = 0;


	//////////////////////////////////////////////////////////////////////////
	//Pure virtual function, is called when the state is updated
	//////////////////////////////////////////////////////////////////////////
	virtual bool Update(float a_dt) = 0;

	
	//////////////////////////////////////////////////////////////////////////
	//Pure virtual function, is called when the state is rendered
	//////////////////////////////////////////////////////////////////////////
	virtual void Render(float a_dt) = 0;
};

#endif //ABAPPSTATE_H